from enum import IntEnum, auto

MAX_CH = 32
MAX_RES_PER_CH = 32
MAX_VLD_SENSOR = 30
RES_SPAN = MAX_CH*MAX_RES_PER_CH
MAX_BULK_SIZE = 128
MAX_SPEC_LENGTH = 4096
TEMP_CAL_LEN = 70
TEMP_CAL_START = -10
TEMP_CAL_END = TEMP_CAL_START + TEMP_CAL_LEN -1

BASE_FREQ = 196251      # GHz

SW_VERSION = 0x01020304

class CHANEL_SEL(IntEnum):
    CH8 = 0
    CH16 = 1
    CH32 = 2
    # CH64 = 3

    def map_to_ch_num(self):
        if self == self.CH32:
            return 32
        elif self == self.CH16:
            return 16
        else:
            return 8



I2C_ADDR_MAPPING = {
    0   : (0, 0x50) ,  #(0, 0xAE) ,
    1   : (0, 0x51) ,  #(0, 0xAC) ,
    2   : (0, 0x52) ,  #(0, 0xAA) ,
    3   : (0, 0x53) ,  #(0, 0xA8) ,
    4   : (0, 0x54) ,  #(0, 0xA6) ,
    5   : (0, 0x55) ,  #(0, 0xA4) ,
    6   : (0, 0x56) ,  #(0, 0xA2) ,
    7   : (0, 0x57) ,  #(0, 0xA0) ,
    8   : (1, 0x50) ,  #(1, 0xAE) ,
    9   : (1, 0x51) ,  #(1, 0xAC) ,
    10  : (1, 0x52) ,  #(1, 0xAA) ,
    11  : (1, 0x53) ,  #(1, 0xA8) ,
    12  : (1, 0x54) ,  #(1, 0xA6) ,
    13  : (1, 0x55) ,  #(1, 0xA4) ,
    14  : (1, 0x56) ,  #(1, 0xA2) ,
    15  : (1, 0x57) ,  #(1, 0xA0) ,
    16  : (2, 0x50) ,  #(2, 0xAE) ,
    17  : (2, 0x51) ,  #(2, 0xAC) ,
    18  : (2, 0x52) ,  #(2, 0xAA) ,
    19  : (2, 0x53) ,  #(2, 0xA8) ,
    20  : (2, 0x54) ,  #(2, 0xA6) ,
    21  : (2, 0x55) ,  #(2, 0xA4) ,
    22  : (2, 0x56) ,  #(2, 0xA2) ,
    23  : (2, 0x57) ,  #(2, 0xA0) ,
    24  : (3, 0x50) ,  #(3, 0xAE) ,
    25  : (3, 0x51) ,  #(3, 0xAC) ,
    26  : (3, 0x52) ,  #(3, 0xAA) ,
    27  : (3, 0x53) ,  #(3, 0xA8) ,
    28  : (3, 0x54) ,  #(3, 0xA6) ,
    29  : (3, 0x55) ,  #(3, 0xA4) ,
    30  : (3, 0x56) ,  #(3, 0xA2) ,
    31  : (3, 0x57)   #(3, 0xA0) 
}

AMP_MAPPING = {
    0 : 255,
    1 : 204, 
    2 : 153,
    3 : 102,
    4 : 51,
    5 : 1,

}